
/**
 * @author Tiina, Chris, Lauri
 *
 * Luokka, joka kuvaa yhtä lentoa ja sen toimintoja.
 */

public class Lento {
	private String destination;
	private String departureStr; //Minne ollaan menossa
	private int departureMin;
	private int x; //Määränpääkaupungin x-koordinaatti
	private int y; //Määränpääkaupungin y-koordinaatti
	private int flightTime; //Lentoaika minuuteissa
	private boolean midAir; //True, jos lento on ilmassa
	private boolean kaikkiFine; //True, jos lento löytyi Excelistä
	private boolean special; //True, jos lento ensimmäinen kyseiseen paikkaan lentävä lento Excelissä
	
	public Lento(String destination, String departure, ExcelReader excel) {
		super();
		this.destination = this.destinaattori(destination); //Muotoillaan haluttuun muotoon
		this.departureStr = departure;
		this.departureMin = this.stringToMinute(departure);
		int[] detaljit = excel.annaTiedot(this.destination); //Haetaan tiedot
		
		if (detaljit != null) {
			this.x = detaljit[0];
			this.y = detaljit[1];
			this.flightTime = detaljit[2];
			this.kaikkiFine = true;
		}
		else {
			this.kaikkiFine = false;
		}
		this.special = false;
		
		this.midAir = false;
	}
	
	/*Palautetaan, löytyykö lento Excelistä vai ei.*/
	public boolean kaikkiOk() {
		return this.kaikkiFine;
	}
	
	
	/*Asetetaan lento ilmaan.*/
	public void setMidAir(boolean on) {
		this.midAir = on;
	}
	
	
	/*Palautetaan, onko lento ilmassa vai ei.*/
	public boolean midAir() {
		return this.midAir;
	}
	
	/*Muotoillaan kaupunki haluuttuun muotoon.*/
	private String destinaattori(String orig) {
		
		//Esim. "Kokkola, Pietarsaari" --> "Kokkola"
		if (orig.contains(",")) {
			return orig.split(",")[0];
		}
		//Esim. "Kemi/Tornio" --> "Kemi"
		if (orig.contains("/")) {
			return orig.split("/")[0];
		}
		
		//Esim. "Stockholm Arlanda" --> "Stockholm", mutta "Hong Kong" pysyy entisellään.
		if (orig.contains(" ")) {
			String[] uusi = orig.split(" ");
			if (uusi[0].length() > 4) {
				return uusi[0];
			}
		}
		return orig;
	}
	
	/*Valitaan lentotieto ainoaksi tämän määränpään lennoksi, josta piirretään valkopallo kartalle.*/
	public void setSpecial() {
		this.special = true;
	}
	
	/*Palautetaan, onko lento ensimmäinen määränpäähänsä lentävä Excelissä.*/
	public boolean getSpecial() {
		return this.special;
	}
	
	public String giveDestination() {
		return this.destination;
	}
	
	public String giveDepartureString() {
		return this.departureStr;
	}
	
	public int giveDepartureMinutes() {
		return this.departureMin;
	}
	
	public int giveDestX() {
		return this.x;
	}
	
	public int giveDestY() {
		return this.y;
	}
	
	public int giveFlightTime() {
		return this.flightTime;
	}
	
	/*Muutetaan String minuuteiksi.*/
	private int stringToMinute(String str) {
		String[] temp;	//Taulukko, johon pilkotaan String	
		temp = str.split(":");//Stringin paloittelu
		if (temp.length != 2) {
			System.err.println("VIRHEELLINEN KELLONAIKA, EI PYSTY LUOMAAN LENTO-OLIOTA!");
		}
		int aikaMinuutteina = Integer.parseInt(temp[0]) * 60 + Integer.parseInt(temp[1]); //Muunnos minuuteiksi
		return aikaMinuutteina;
	}
	
	@Override
	public String toString() {
		return this.giveDestination() + ", " + this.giveDepartureString() + " (" + this.giveDepartureMinutes() + ")"
				+ "      x:" + this.x + " y:"+ this.y + "    Flight time: "+ this.flightTime;
	}
}
